/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException;
import com.mysql.jdbc.exceptions.MySQLSyntaxErrorException;
import datos.DbConnection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Marcelo
 */
public class Asistencia {
    int id;
    String codigoinscrito;
    int sesion;
    Date hora;

    public String getCodigoinscrito() {
        return codigoinscrito;
    }

    public void setCodigoinscrito(String codigoinscrito) {
        this.codigoinscrito = codigoinscrito;
    }

    public Date obtenerHoraDate()
    {
        return hora;
    }
    
    public String getHora() {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return dateFormat.format(hora);
        
    }

    public void setHora(Date hora) {
        this.hora = hora;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getSesion() {
        return sesion;
    }

    public void setSesion(int sesion) {
        this.sesion = sesion;
    }

    public Asistencia(int id, String codigoinscrito, int sesion, Date hora) {
        this.id = id;
        this.codigoinscrito = codigoinscrito;
        this.sesion = sesion;
        this.hora = hora;
    }

    public Asistencia() {
    }

    
    
    //;para agregar un nuevo contacto
    static public void agregarNuevo(Asistencia asistencia) throws AlreadyExistsException
    {
        DbConnection db = DataBase.getNewConnection();
        try
        {
            db.insertionWithout(asistencia, "id");
        } 
        catch(MySQLIntegrityConstraintViolationException e) {
            System.err.println("Ya existe " + asistencia.getCodigoinscrito() + " " + asistencia.getSesion());
            throw new AlreadyExistsException();
        }
        db.closeConnection();
    }
    /*
    //modificacion de los datos de un contacto
    static public void modificar(PerfilInscrito asistencia)
    {
        DbConnection db = DataBase.getNewConnection();
        db.update("oid", asistencia);//mandamos como parametro el nombre del atributo que sera usada como clave primaria
        db.closeConnection();
    }*/
    
    //eliminar contactos por sus cedulas, puede ser un vector para eliminar varios contactos a la vez
    static public void eliminaPorCI(String[] cedulas)
    {
        DbConnection db = DataBase.getNewConnection();
        PerfilInscrito persona = new PerfilInscrito();
        for (int c=0;c<cedulas.length;c++)
        {
            persona.setCedula(cedulas[c]);
            db.removing("cedula", persona);
        }
        db.closeConnection();
    }
    
    //para eliminar un contacto por su cedula
    static public void elimina(PerfilInscrito persona)
    {
        DbConnection db = DataBase.getNewConnection();
        db.removing("cedula", persona);
        db.closeConnection();
    }
        
    static public PerfilInscrito encontrarPorCI(String cedula)
    {
        PerfilInscrito persona = new PerfilInscrito();
        persona.setCedula(cedula);
        
        LinkedList<PerfilInscrito> personas = encontrar("cedula", persona);
        
        if (personas.size() == 0)
            return null;
        else
            return personas.getFirst();
    }
    
    static public Asistencia encontrarPorCodigoSesion(String codigo, int sesion)
    {
        
        codigo = codigo.replace("'", "\\'");
        
        try {
            DbConnection db = DataBase.getNewConnection();

            PerfilInscrito persona = new PerfilInscrito();
            persona.setCodigo(codigo);

            ResultSet r = db.RunSql("select id, codigoinscrito, sesion, hora from asistencia where codigoinscrito='" + codigo + "' and sesion=" + sesion);
            try {
                if (r.first())
                {
                    Asistencia asistencia = new Asistencia();
                    asistencia.setCodigoinscrito(codigo);
                    asistencia.setSesion(sesion);
                    asistencia.setHora( r.getTimestamp("hora") );
                    asistencia.setId( r.getInt("id") );
                    
                    return asistencia;
                }
                
            } catch (SQLException ex) {
                Logger.getLogger(Asistencia.class.getName()).log(Level.SEVERE, null, ex);
            }


            
        } catch (MySQLSyntaxErrorException ex) {
            Logger.getLogger(Asistencia.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;
    }
    static public PerfilInscrito encontrarPorCodigo(String codigo)
    {
        codigo = codigo.replace("'", "\\'");
        
        PerfilInscrito persona = new PerfilInscrito();
        persona.setCodigo(codigo);
        
        LinkedList<PerfilInscrito> personas = encontrar("codigo", persona);
        
        if (personas.size() == 0)
            return null;
        else
            return personas.getFirst();        
    }
    
    
    //devuelve una lista ligada con todos los resultados
    static public LinkedList<PerfilInscrito> encontrar(String campo, PerfilInscrito persona)
    {
        DbConnection db = DataBase.getNewConnection();
        
        ResultSet r = db.search(campo, persona);//realizamos la consulta
        LinkedList<PerfilInscrito> personas = new LinkedList<PerfilInscrito>();
        if (r!=null)//si existen resultados
        {
            try {
                while( r.next() )//para recorrer cada resultado
                {
                    //creamos una persona con los datos obtenidos y la agregamos a la lista ligada
                    
                    PerfilInscrito currPersona = new PerfilInscrito();
                    //currPersona.copiarDe(r);
                    
                    currPersona.oid = r.getInt("oid");
                    currPersona.nombres = r.getString("nombres");
                    currPersona.observaciones = r.getString("observaciones");
                    currPersona.pagado = r.getBoolean("pagado");
                    currPersona.tipo = r.getInt("tipo");
                    currPersona.nombres = r.getString("nombres");
                    currPersona.apellidos = r.getString("apellidos");
                    currPersona.telefono = r.getString("telefono");
                    currPersona.codigo = r.getString("codigo");
                    currPersona.email = r.getString("email");
                            
                    
                    /*PerfilInscrito currPersona = new PerfilInscrito(
                        r.getString( "cedula" ) ,
                        r.getString( "nombre" ) ,
                        r.getString( "direccion" ) ,
                        r.getString( "telefono" )                     
                    );*/

                    personas.add( currPersona );
                }            
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
        
        db.closeConnection();
        return personas;
    }    
    
}
